package com.zzl.alligator.management.system.service;

import com.zzl.alligator.management.system.domain.SysRole;

import java.util.List;
import java.util.Set;

/**
 * 角色
 *
 * @author zhouziliang
 * @since 2020/6/26
 */
public interface ISysRoleService {
    /**
     * 分页查找角色列表
     *
     * @param role 查询条件
     * @return 查询结果
     */
    List<SysRole> findRoleList(SysRole role);

    /**
     * 根据用户ID 查找用户的角色列表
     *
     * @param userId
     * @return
     */
    Set<String> findRolePermissionByUserId(Long userId);

    /**
     * 查找所有的角色列表
     *
     * @return 所有的角色
     */
    List<SysRole> findAllRole();

    /**
     * 根据用户ID查找用户的角色信息
     *
     * @param userId 用户ID
     * @return 角色列表
     */
    List<Long> findRoleListByUserId(Long userId);

    /**
     * 根据角色ID查找角色信息
     *
     * @param roleId 角色ID
     * @return 角色信息
     */
    SysRole findRoleById(Long roleId);

    /**
     * 校验角色名称是否唯一
     *
     * @param role 角色
     * @return 是否唯一
     */
    String checkRoleNameUnique(SysRole role);

    /**
     * 校验角色权限是否唯一
     *
     * @param role 角色
     * @return 结果
     */
    String checkRoleKeyUnique(SysRole role);

    /**
     * 校验角色是否允许操作
     *
     * @param role 角色
     */
    void checkRoleAllowed(SysRole role);

    /**
     * 通过角色Id查找角色被引用数量
     *
     * @param roleId 橘色ID
     * @return 引用数量
     */
    int countUserRoleByRoleId(Long roleId);

    /**
     * 插入角色
     *
     * @param role 角色
     * @return 插入条数
     */
    int insertRole(SysRole role);

    /**
     * 更新角色
     *
     * @param role 角色
     * @return 更新条数
     */
    int updateRole(SysRole role);

    /**
     * 修改角色状态
     *
     * @param role 角色
     * @return 影响条数
     */
    int updateRoleStatus(SysRole role);

    /**
     * 修改数据权限信息
     *
     * @param role 角色
     * @return 影响条数
     */
    int authDataScope(SysRole role);

    /**
     * 删除角色
     *
     * @param roleId 角色ID
     * @return 影响条数
     */
    int deleteRoleById(Long roleId);

    /**
     * 批量删除角色
     *
     * @param roleIds 橘色ID
     * @return 影响条数
     */
    int deleteRoleByIds(Long[] roleIds);

}
